package org.feng.entity;

import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Transient;

import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;

import io.quarkus.hibernate.orm.panache.PanacheEntityBase;

/**
 * 服务商信息
 * @author FengWenXue
 *
 */
@Entity
//@Table(name = "USER")
public class ServiceProvider extends PanacheEntityBase {

    /**
 	*  id 服务商ID
	*/
    @Id
    @GeneratedValue
    public Integer id;

    /**
	* name 服务商名称  
	*/
    @Column(length=50,nullable=false,unique=false)
    public String name;

    /**
	* nameShort 服务商简称 不能重复 例如 拉萨维护酒店 简称 维护; 崔光饭店 简称  崔光
	*/
    @Column(length=20,nullable=false,unique=false)
    public String nameShort;

    /**
	* addar 服务商地址
	*/
    @Column(length=50,nullable=false)
    public String addar;

    /**
	* tel 服务商联系电话
	*/
    @Column(length=20,nullable=true)
    public String tel;

    /**
	* country 服务商所属国家
	*/
    @Column(length=20,nullable=true)
    public String country="cn";

    /**
	* province 服务商所属省
	*/
    @Column(length=10,nullable=true)
    public String province;
    /**
	* city 服务商所属市
	*/
    @Column(length=10,nullable=true)
    public String city;
    /**
	* county 服务商所属县
	*/
    @Column(length=20,nullable=true)
    public String county;
    /**
	* town 服务商所属镇
	*/
    @Column(length=20,nullable=true)
    public String town;
    /**
	* parentId 上级运营商 ID
	*/
    public Integer parentId=0;
    
    /**
     * type 服务商类别 3 运营商(平台) 1 服务商(酒店) 2 供货商(生产厂家) 120 其他
     */
    public Byte type=0;
    
    /**
     * latitude 经度
     */
    public float latitude;
    
    /**
     * longitude 纬度
     */
    public float longitude;
    
    /**
     * altitude 海拔高度
     */
    //public float altitude;
    

    @Transient
    //@JsonIgnore
    private List<ServiceProvider> children;
    
    /**
     * statu 存在状态 1 正常  2 备份 -1 失效 -2 删除 >0 显示  <0 不显示
     */
    //@Column(columnDefinition="1")
    public Byte status=0;
    
    /**
	* createTime 创建时间,只读
	*/
	@CreationTimestamp //新增时更新时间
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
	@Column(nullable=false,updatable=false)
    private LocalDateTime createTime;//=LocalDateTime.now();

    public LocalDateTime getCreateTime() {
		return createTime;
	}

	/**
	* modifyTime 更新时间
	*/
	//@JsonIgnore
    @UpdateTimestamp //更新时更新时间
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    //@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable=false,updatable=true,insertable=false)
    public Timestamp modifyTime;

    @Transient
    @JsonIgnore
    private ServiceProvider parentProvider=null;
   /**
     * 获取 运营商
     * @returnparentId
     */   
    public ServiceProvider getParentProvider(boolean isRefresh) {
    	if (parentId<1)
    		return null;
    	if (isRefresh || null==parentProvider) {
    		parentProvider=ServiceProvider.findById(parentId);
    	}
    	return parentProvider;
    }

    public void setParentDept(ServiceProvider parentProvider) {
		this.parentProvider = parentProvider;
	}

   /**
     * 获取所有子部门
     * @param isRefresh true 表示从数据库中刷新数据 false 获取缓存数据
     * @return
     */
    public List<ServiceProvider> getChildren(boolean isRefresh){
    	if (isRefresh || null==children) {
    		children=ServiceProvider.list("parentId", id);
    		for (ServiceProvider dp : children) {
    			dp.setParentDept(this);
    		}
    	}
    	return children;
    }
    
    /**
     * 子数
     * @return 2021年4月30日
     */
	@Transient
    public long childCount(){
    	return ServiceProvider.count("parentId", id);
    }
    
    

    @Override
    public String toString() {
        return "ServiceProvider{" +
                "providerId=" + id +
                ", name='" + name + '\'' +
                ", parentId=" + parentId +
                //", orderNum=" + orderNum +
                ", createTime=" + createTime +
                ", modifyTime=" + modifyTime +
                '}';
    }
}